package com.xiaobao.service.impl;

import com.xiaobao.mapper.OnlineTimeMapper;
import com.xiaobao.pojo.UserOnlineData;
import com.xiaobao.service.OnlineTimeService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;

//统计在线时长
@Service
public class OnlineTimeServiceServiceImpl implements OnlineTimeService {
    private static final Logger log = LoggerFactory.getLogger(OnlineTimeServiceServiceImpl.class);
    private final OnlineTimeMapper onlineTimeMapper;

    public OnlineTimeServiceServiceImpl(OnlineTimeMapper onlineTimeMapper) {
        this.onlineTimeMapper = onlineTimeMapper;
    }

    /**
     * 重写添加在线时长的方法
     *
     * @param userId        用户ID，用于标识特定的用户
     * @param totalDuration 用户本次的在线总时长，以秒为单位
     */
    @Override
    public void addOnlineTime(String userId, Long totalDuration) {
        // 获取当前日期，格式为"yyyy-MM-dd"
        String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        // 记录当前时间
        log.info("当前时间：{}", time);
        // 检查用户是否已经有在线时长记录
        if (onlineTimeMapper.getOnlineTime(userId) != 0) {
            // 临时变量，用于标记是否找到了匹配的日期
            int temp = 0;
            // 遍历用户的所有在线时间记录日期
            for (String s : onlineTimeMapper.getTime(userId)) {
                // 如果找到匹配的日期
                if (s.equals(time)) {
                    // 获取用户在该日期的总在线时长
                    Long totalDuration1 = onlineTimeMapper.getTotalDuration(userId, time);
                    // 累加本次的在线时长
                    totalDuration += totalDuration1;
                    // 更新数据库中的在线时长记录
                    onlineTimeMapper.updateOnlineTime(userId, totalDuration, time);
                    break;
                }
                temp++;
            }
            // 如果没有找到匹配的日期，说明这是用户在新日期的第一次在线记录
            if (temp == onlineTimeMapper.getTime(userId).length) {
                // 在数据库中添加新的在线时间记录
                onlineTimeMapper.addOnlineTime(userId, totalDuration, time);
            }
        } else {
            // 如果用户没有任何在线时长记录，则添加第一条在线时间记录
            onlineTimeMapper.addOnlineTime(userId, totalDuration, time);
        }
    }

    /**
     * 获取用户每天的在线时长
     * 此方法通过用户的唯一标识符（userId）来查询该用户每天的在线时长
     * 它调用了onlineTimeMapper的getUserOnlineTime方法来获取数据
     *
     * @param userId 用户的唯一标识符，用于识别特定的用户
     * @return 返回一个UserOnlineData数组，每个元素包含用户某一天的在线时长信息
     */
    @Override
    public UserOnlineData[] getUserOnlineTime(String userId) {
        return onlineTimeMapper.getUserOnlineTime(userId);
    }
}
